<?php

include_once 'classes/model/user.php';
include_once 'classes/model/question.php';
include_once 'classes/model/loader.php';
include_once 'classes/model/kdomain.php';
include_once 'classes/model/userkdomain.php';

include_once 'classes/view.php';

class Controller{
  
  protected $request = null;
  //protected $module = '';
  protected $action = '';
  protected $view = null;
  //protected $displayBeh = null;
  protected $requestUser = null;

  protected $actionController = null;

  /**
   * Konstruktor, erstellt den Controller.
   *
   * @param Array $request Array aus $_GET & $_POST.
   */
  public function __construct($request){
    //TODO: ViewFactory implementieren
    $this->view = new View();
    
      $this->request = $request;
    $this->module = !empty($request['module']) ? $request['module'] : 'home';
    $this->action = !empty($request['action']) ? $request['action'] : 'show';
  }

  /**
   * Methode zum anzeigen des Contents.
   *
   * @return String Content der Applikation.
   */
  public function Process(){
    //$this->displayBeh->display(); //Strategy-Pattern für den Controller  hier vermutlich weniger geeignet
    
    //Erst wird aufgrund des gewählten Modules, dann aufgrund der gewählten action geswitcht
    switch($this->module){
      case 'userpage':
        $this->view->SetTemplate('userpage');
        switch ($this->action)
            {
              case 'ask':
                $this->actionController = new Ask();
              case 'show':
              default:
                $this->actionController = new Show();
            }
      case 'home':
      default:
        $this->view->SetTemplate('home');
    }
    //Nach dem Command-Pattern implementiert dieses Objekt den Controller-Befehl
    $this->actionController.Execute($this->request);
    //Hier wird nun der View ausgeführt
    return $this->view->Display();
    
    //TODO: Evtl Module und Action aus Request-Array entfernen?
  }
  
}
?>